package com.verification_code;

import redis.clients.jedis.Jedis;

import java.util.Random;

public class PhoneVerificationCode {
    public static void main(String[] args) {
        verificationCode("123456789");
//        getRedisCode("123456789","326183");
    }

    // 获取 验证码
    public static String getCode(){
        Random random = new Random();
        StringBuffer code = new StringBuffer();
        for (int i = 0; i < 6; i++) {
            int rand = random.nextInt(10);
            code.append(rand);
        }
        return code.toString();
    }
    // 每个手机每天只能发送三次，验证码放到 redis 中，设置过期时间
    public static void verificationCode(String phone){
        Jedis jedis = new Jedis("43.142.109.103",6379);
        // 手机发送次数 key
        String countKey = "VerificationCode" + phone + "count";
        //验证码 key
        String codeKey = "VerificationCode" + phone + "code";

        // 每个手机每天只能发送三次
        String count = jedis.get(countKey);
        if(count == null){
            // 没有发送次数，证明是第一次发送
            // 即设置发送次数为1
            jedis.setex(countKey,24 * 60 * 60,"1");
        }else if(Integer.parseInt(count) < 3){
            // 发送次数加一
            jedis.incr(countKey);
        }else if(Integer.parseInt(count) > 2){
            System.out.println("几天发送次数已经超过了三次！");
            // 需要手动回收资源
            jedis.close();
            return;
        }
        // 发送的验证码放到redis 里面去。
        String code = getCode();
        System.out.println(code);
        jedis.setex(codeKey,120,code);

        // 需要手动回收资源
        jedis.close();
    }
    // 验证码校验
    public static void getRedisCode(String phone,String code){
        Jedis jedis = new Jedis("43.142.109.103",6379);
        //验证码 key
        String codeKey = "VerificationCode" + phone + "code";
        // 根据 key 获取到对应的验证码
        String redisCode = jedis.get(codeKey);
        // 比较验证码
        if(redisCode.equals(code)){
            System.out.println("验证通过！");
        }else{
            System.out.println("验证失败！");
        }
        jedis.close();
    }
}
